﻿/*!
 * 定义模块 Apps (应用与功能) 中所有功能的服务 API。
 * 
 * Copyright (c), 上海沃恩信息科技有限公司.
 * All rights reserved.
 * Licensed under BSD (https://www.pittypat.work/bsd.html).
 */

/*
 * @param {Object} $    jQuery 命名空间。
 * @param {Object} $$   pittypat 命名空间。
 * @param {Object} _mod 模块 Apps (应用与功能) 的命名空间。
 * 
 * 更多说明请参见：
 * https://www.pittypat.work/com/waln/pittypat/coding/help/_api.js.html。
 */
(function ($, $$, _mod) {
    'use strict';

    // 模块的 API 和 UI 命名空间
    var _api = _mod.api = _mod.api || {};

	/*
	 * 功能 List (应用列表) 的服务 API。
	 * 
	 * 输入(args):
	 * {}
	 * 
	 * 输出(success.result):
	 * // 应用列表
	 * // 系统中已经安装的所有 App 的列表。
	 * apps: [{
	 *     // Id
	 *     id: {uuid?},
	 * 
	 *     // 开发者代码
	 *     // App 开发者代码。
	 *     developerCode: {string?},
	 * 
	 *     // 开发者名称
	 *     // App 开发者的名称。
	 *     developerName: {string?},
	 * 
	 *     // App 标识符
	 *     // App 的标识符。
	 *     identifier: {string?},
	 * 
	 *     // App 名称
	 *     // App 的名称。
	 *     name: {string?},
	 * 
	 *     // App 版本
	 *     // App 的版本号。
	 *     version: {string?},
	 * 
	 *     // 模块数目
	 *     // App 中模块的数目。
	 *     moduleCount: {int16?},
	 * 
	 *     // 描述
	 *     // 对 App 的描述信息。
	 *     description: {string?},
	 * 
	 *     // 位置
	 *     // 在导航列表中，App 的先后顺序，这是由系统管理员设置的顺序。
	 *     position: {int32?},
	 * 
	 *     // 安装时间
	 *     // App 的安装时间。
	 *     installTime: {datetime?} 
	 * }, ...]
	 */
    _api.list = $$.api({
        // 请求路径
        url: '~/waln/authority/apps/list',

        // 请求方法：WS|WEBSOCKET、UPLOAD、UPOST|UPLOAD-POST、UWS|UPLOAD-WS、POST 之一
        method: 'POST',

        // 对 args 进行验证
        validate: function (e) {
            // 空字符串表示通过验证
            e.message = '';
        },

        // 发送给服务器的数据
        data: function (e) {
            e.data = e.args;
        }
    });

	/*
	 * 功能 SetPosition (设置位置) 的服务 API。
	 * 
	 * 输入(args):
	 * {
	 *     // 应用 Id
	 *     id: {uuid?},
	 * 
	 *     // 位置
	 *     // 在导航列表中，App 的先后顺序，这是由系统管理员设置的顺序。
	 *     position: {int32?} 
	 * }
	 * 
	 * 输出(success.result):
	 * null
	 */
    _api.setPosition = $$.api({
        // 请求路径
        url: '~/waln/authority/apps/setposition',

        // 请求方法：WS|WEBSOCKET、UPLOAD、UPOST|UPLOAD-POST、UWS|UPLOAD-WS、POST 之一
        method: 'POST',

        // 对 args 进行验证
        validate: function (e) {
            if (!e.args) {
                e.message = '没有提供任何参数。';
                return;
            }

            // 验证 id (应用 Id)
            if (!$$.util.is.uuid(e.args.id)) {
                e.message = '没有提供有效的应用 Id。';
                return;
            }

            // 验证 position (位置)
            if (!$$.util.is.int(e.args.position, 0, 2147483647)) {
                e.message = '没有提供有效的位置。';
                return;
            }

            // 空字符串表示通过验证
            e.message = '';
        },

        // 发送给服务器的数据
        data: function (e) {
            e.data = e.args;
        }
    });

	/*
	 * 功能 Modules (模块列表) 的服务 API。
	 * 
	 * 输入(args):
	 * {
	 *     // 隶属应用 Id
	 *     // 模块隶属的 App 的 Id。
	 *     appId: {uuid?} 
	 * }
	 * 
	 * 输出(success.result):
	 * // 模块列表
	 * // 隶属于目标 App 的所有模块的列表。
	 * list: [{
	 *     // Id
	 *     id: {uuid?},
	 * 
	 *     // 隶属 App 的 Id
	 *     // 模块隶属的 App 的 Id。
	 *     appId: {uuid?},
	 * 
	 *     // 位置
	 *     // 模块在同一个 App 中先后显示顺序。
	 *     position: {int16?},
	 * 
	 *     // 标识符
	 *     // 模块的标识符。
	 *     identifier: {string?},
	 * 
	 *     // 模块名称
	 *     // 模块的名称。
	 *     name: {string?},
	 * 
	 *     // 呈现方式
	 *     // 指示模块应该如何对外呈现：0-Internal，1-UI，2-Service。
	 *     presentation: {int8?},
	 * 
	 *     // 允许匿名访问
	 *     // 指示模块是否允许匿名用户访问和使用。
	 *     allowAnonymous: {bool?},
	 * 
	 *     // 描述
	 *     // 对模块的描述信息。
	 *     description: {string?} 
	 * }, ...]
	 */
    _api.modules = $$.api({
        // 请求路径
        url: '~/waln/authority/apps/modules',

        // 请求方法：WS|WEBSOCKET、UPLOAD、UPOST|UPLOAD-POST、UWS|UPLOAD-WS、POST 之一
        method: 'POST',

        // 对 args 进行验证
        validate: function (e) {
            // 验证 appId
            if (!$$.util.is.uuid(e.args)) {
                e.message = '没有提供有效的隶属应用 Id。';
                return;
            }

            // 空字符串表示通过验证
            e.message = '';
        },

        // 发送给服务器的数据
        data: function (e) {
            e.data = {
                // 隶属应用 Id
                appId: e.args
            };
        }
    });
})(jQuery, pittypat, pittypat.namespace('waln.authority.apps'));
